package com.yjzx.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;

/**
 * @author yjzx
 * @date 2023/10/25
 * @description
 */
public class FileUtil {
    private static final Logger logger = Logger.getLogger(FileUtil.class.getName());
    /**
     * 添加文件
     * @param mkdirs 是否生成目录
     * @param files 文件
     */
    public static void addFile(boolean mkdirs, List<File> files) {
        try {
            for (File file : files) {
                if (!file.exists()) {
                    if (mkdirs){
                        String path = file.getPath();
                        int i = path.lastIndexOf("\\") + 1;
                        if (i==0){
                            i = path.lastIndexOf("/")+1;
                        }
                        File dir = new File(path.substring(i));
                        if (!dir.exists()) {
                            dir.mkdirs();
                        }
                    }
                    file.createNewFile();
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 复制文件
     *
     * @param source 原文件
     * @param dest 新文件
     */
    public static void copyFileUsingFileChannels(File source, File dest) {
        logger.info(source.getPath() + "\t\t--copy->\t\t" + dest.getPath());
        try (FileInputStream inputStream = new FileInputStream(source); FileOutputStream outputStream = new FileOutputStream(dest)) {
            outputStream.getChannel().transferFrom(inputStream.getChannel(), 0, inputStream.getChannel().size());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 删除文件
     * @param delFile 文件全路径
     */
    public static void delFolder(File delFile) {
        if (delFile.isFile()) {
            delFile.delete();
        } else {
            File[] files = delFile.listFiles();
            for (File file : files) {
                delFolder(file);
            }
            delFile.delete();
        }

    }
}
